package core;


import java.util.Vector;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Kvest
 */
public class RegionsFilter
{
    public class Pair
    {
        private String name;
        private boolean active;

        public Pair(String name, boolean active)
        {
            this.name = name;
            this.active = active;
        }

        public Pair copy()
        {
            return (new Pair(name, active));
        }

        public String getName()
        {
            return name;
        }

        public boolean isActive()
        {
            return active;
        }

        public void setActive(boolean newValue)
        {
            active = newValue;
        }
    }

    private Vector regions;

    public RegionsFilter(String reg)
    {
        regions = new Vector();
        
        setRgions(reg);
    }

    public void setRgions(String reg)
    {
        if (reg == null)
        {
            return;
        }

        //Чистим списки
        regions.removeAllElements();

        //Сохраняем значения
        String region,flag,tmp;
        while (reg.indexOf(";") != -1)
        {
            tmp = reg.substring(0, reg.indexOf(";"));

            //Парсим данные
            region = tmp.substring(0, tmp.lastIndexOf('_'));
            flag = tmp.substring(tmp.lastIndexOf('_') + 1);

            //Сохраняем данные
            regions.addElement(new Pair(region,flag.equals("1")));

            //Отрезаем то что обработали
            reg = reg.substring(reg.indexOf(";") + 1);
        }
    }

    public boolean isEmpty()
    {
        return (regions.size() == 0);
    }

    public Pair[] getRegionsList()
    {
        Pair[] res;
        int size = regions.size();
        res = new Pair[size];
        for (int i = 0; i < size; ++i)
        {
            res[i] = (Pair)regions.elementAt(i);
        }

        return res;
    }

    public void updateRegions(String[] values)
    {
        //Чистим списки
        regions.removeAllElements();

        //Сохраняем значения
        for (int i = 0; i < values.length; ++i)
        {
            regions.addElement(new Pair(values[i],true));
        }
    }

    public void setActive(String name, boolean value)
    {
        int size = regions.size();
        for (int i = 0; i < size; ++i)
        {
            if (((Pair)regions.elementAt(i)).getName().equals(name))
            {
                ((Pair)regions.elementAt(i)).setActive(value);
                return;
            }
        }
    }

    public boolean outOfFilter(String name)
    {
        int size = regions.size();
        for (int i = 0; i < size; ++i)
        {
            if (((Pair)regions.elementAt(i)).getName().equals(name))
            {
                return (!((Pair)regions.elementAt(i)).isActive());
            }
        }

        return false;
    }

    public String getString(boolean allTrue)
    {
        String result = "";
        int size = regions.size();

        for (int i = 0; i < size; ++i)
        {
            result += ((Pair)regions.elementAt(i)).getName();
            if (allTrue || ((Pair)regions.elementAt(i)).isActive())
            {
                result += "_1;";
            }
            else
            {
                result += "_0;";
            }
        }

        return result;
    }
}
